{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import glob # 文件路径处理\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 获取所有训练图像路径\n",
    "train_image_path = glob.glob('./dataset/dc_2000/train/*/*.jpg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train_image_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['./dataset/dc_2000/train\\\\cat\\\\cat.0.jpg',\n",
       " './dataset/dc_2000/train\\\\cat\\\\cat.1.jpg',\n",
       " './dataset/dc_2000/train\\\\cat\\\\cat.10.jpg',\n",
       " './dataset/dc_2000/train\\\\cat\\\\cat.100.jpg',\n",
       " './dataset/dc_2000/train\\\\cat\\\\cat.101.jpg']"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image_path[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['./dataset/dc_2000/train\\\\dog\\\\dog.995.jpg',\n",
       " './dataset/dc_2000/train\\\\dog\\\\dog.996.jpg',\n",
       " './dataset/dc_2000/train\\\\dog\\\\dog.997.jpg',\n",
       " './dataset/dc_2000/train\\\\dog\\\\dog.998.jpg',\n",
       " './dataset/dc_2000/train\\\\dog\\\\dog.999.jpg']"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image_path[-5:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 提取图片路径中的label  cat为1，dog为0\n",
    "train_image_label = [int(p.split('\\\\')[1] == 'cat') for p in train_image_path]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 0, 0, 0, 0]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image_label[-5:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 通过路径读取图片\n",
    "def load_preprosess_image(path,label):\n",
    "    image = tf.io.read_file(path)\n",
    "    #解码\n",
    "    image = tf.image.decode_jpeg(image,channels=3)\n",
    "    #将图像处理成相同大小\n",
    "    image = tf.image.resize(image,[360,360])\n",
    "    # 数据增强\n",
    "    image = tf.image.random_crop(image,[256,256,3]) # 随机裁剪\n",
    "    image = tf.image.random_flip_left_right(image) # 随机左右翻转\n",
    "    image = tf.image.random_flip_up_down(image) # 随机上下翻转\n",
    "    image = tf.image.random_brightness(image,0.5) # 随机调整亮度\n",
    "    image = tf.image.random_contrast(image,0,1) # 随机对比度\n",
    "    \n",
    "    #改变数据类型\n",
    "    image = tf.cast(image,tf.float32)\n",
    "    #归一化\n",
    "    image = image/255\n",
    "    \n",
    "    #将label处理成二维的: [1,2,3] ---> [[1],[2],[3]]\n",
    "    label = tf.reshape(label,[1])\n",
    "    return image,label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 原数据不是float类型时转换数据类型时默认做归一化   原数据是float类型转换时不做归一化\n",
    "# tf.image.convert_image_dtype "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建dataset\n",
    "train_image_ds = tf.data.Dataset.from_tensor_slices((train_image_path,train_image_label))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<TensorSliceDataset shapes: ((), ()), types: (tf.string, tf.int32)>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image_ds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 根据计算机cpu的个数自动做并行运算\n",
    "AUTOTUNE =tf.data.experimental.AUTOTUNE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# map:将变化应用在所有数据上，num_parallel_calls：是否进行并行运算\n",
    "train_image_ds = train_image_ds.map(load_preprosess_image,num_parallel_calls=AUTOTUNE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<ParallelMapDataset shapes: ((256, 256, 3), (1,)), types: (tf.float32, tf.int32)>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image_ds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for img,label in train_image_ds.take(1):\n",
    "    plt.imshow(img)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "BATCH_SIZE = 32\n",
    "train_count = len(train_image_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_image_ds = train_image_ds.shuffle(train_count).batch(BATCH_SIZE)\n",
    "# 在计算机后台预先加载数据：参数为加载数据的大小--AUTOTUNE表示让计算机自己决定\n",
    "train_image_ds = train_image_ds.prefetch(AUTOTUNE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<PrefetchDataset shapes: ((None, 256, 256, 3), (None, 1)), types: (tf.float32, tf.int32)>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_image_ds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_image_path = glob.glob('./dataset/dc_2000/test/*/*.jpg')\n",
    "test_image_label = [int(p.split('\\\\')[1] == 'cat') for p in test_image_path]\n",
    "test_image_ds = tf.data.Dataset.from_tensor_slices((test_image_path,test_image_label))\n",
    "test_image_ds = test_image_ds.map(load_preprosess_image,num_parallel_calls=AUTOTUNE)\n",
    "test_image_ds = test_image_ds.batch(BATCH_SIZE)\n",
    "# 在计算机后台预先加载数据：参数为加载数据的大小--AUTOTUNE表示让计算机自己决定\n",
    "test_image_ds = test_image_ds.prefetch(AUTOTUNE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# iter(train_image_ds):使用iter将数据集转换为生成器，然后使用next按批次取数据\n",
    "imgs,labels = next (iter (train_image_ds))()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"model = keras.Sequential([\\n    tf.keras.layers.Conv2D(64,(3,3),input_shape=(256,256,3),activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.MaxPooling2D(),\\n    tf.keras.layers.Conv2D(128,(3,3),activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.MaxPooling2D(),\\n    tf.keras.layers.Conv2D(256,(3,3),activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.MaxPooling2D(),\\n    tf.keras.layers.Conv2D(512,(3,3),activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.MaxPooling2D(),\\n    tf.keras.layers.Conv2D(1024,(3,3),activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.GlobalAveragePooling2D(),\\n    tf.keras.layers.Dense(1024,activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.Dense(256,activation='relu'),\\n    tf.keras.layers.BatchNormalization(),\\n    tf.keras.layers.Dense(1)\\n]) \""
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = keras.Sequential([\n",
    "    tf.keras.layers.Conv2D(64,(3,3),input_shape=(256,256,3),padding = 'same',activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(64,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(128,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(128,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(256,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(256,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(256,(1,1),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(512,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(512,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(512,(1,1),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(512,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(512,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Conv2D(512,(1,1),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.GlobalAveragePooling2D(),\n",
    "    tf.keras.layers.Dense(4096,activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Dense(4096,activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Dense(1000,activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Dense(1)\n",
    "])\n",
    "\n",
    "\n",
    "\"\"\"model = keras.Sequential([\n",
    "    tf.keras.layers.Conv2D(64,(3,3),input_shape=(256,256,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(128,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(256,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(512,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.MaxPooling2D(),\n",
    "    tf.keras.layers.Conv2D(1024,(3,3),activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.GlobalAveragePooling2D(),\n",
    "    tf.keras.layers.Dense(1024,activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Dense(256,activation='relu'),\n",
    "    tf.keras.layers.BatchNormalization(),\n",
    "    tf.keras.layers.Dense(1)\n",
    "]) \"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential_5\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "conv2d_78 (Conv2D)           (None, 256, 256, 64)      1792      \n",
      "_________________________________________________________________\n",
      "batch_normalization_80 (Batc (None, 256, 256, 64)      256       \n",
      "_________________________________________________________________\n",
      "conv2d_79 (Conv2D)           (None, 254, 254, 64)      36928     \n",
      "_________________________________________________________________\n",
      "batch_normalization_81 (Batc (None, 254, 254, 64)      256       \n",
      "_________________________________________________________________\n",
      "max_pooling2d_29 (MaxPooling (None, 127, 127, 64)      0         \n",
      "_________________________________________________________________\n",
      "conv2d_80 (Conv2D)           (None, 125, 125, 128)     73856     \n",
      "_________________________________________________________________\n",
      "batch_normalization_82 (Batc (None, 125, 125, 128)     512       \n",
      "_________________________________________________________________\n",
      "conv2d_81 (Conv2D)           (None, 123, 123, 128)     147584    \n",
      "_________________________________________________________________\n",
      "batch_normalization_83 (Batc (None, 123, 123, 128)     512       \n",
      "_________________________________________________________________\n",
      "max_pooling2d_30 (MaxPooling (None, 61, 61, 128)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_82 (Conv2D)           (None, 59, 59, 256)       295168    \n",
      "_________________________________________________________________\n",
      "batch_normalization_84 (Batc (None, 59, 59, 256)       1024      \n",
      "_________________________________________________________________\n",
      "conv2d_83 (Conv2D)           (None, 57, 57, 256)       590080    \n",
      "_________________________________________________________________\n",
      "batch_normalization_85 (Batc (None, 57, 57, 256)       1024      \n",
      "_________________________________________________________________\n",
      "conv2d_84 (Conv2D)           (None, 57, 57, 256)       65792     \n",
      "_________________________________________________________________\n",
      "batch_normalization_86 (Batc (None, 57, 57, 256)       1024      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_31 (MaxPooling (None, 28, 28, 256)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_85 (Conv2D)           (None, 26, 26, 512)       1180160   \n",
      "_________________________________________________________________\n",
      "batch_normalization_87 (Batc (None, 26, 26, 512)       2048      \n",
      "_________________________________________________________________\n",
      "conv2d_86 (Conv2D)           (None, 24, 24, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "batch_normalization_88 (Batc (None, 24, 24, 512)       2048      \n",
      "_________________________________________________________________\n",
      "conv2d_87 (Conv2D)           (None, 24, 24, 512)       262656    \n",
      "_________________________________________________________________\n",
      "batch_normalization_89 (Batc (None, 24, 24, 512)       2048      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_32 (MaxPooling (None, 12, 12, 512)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_88 (Conv2D)           (None, 10, 10, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "batch_normalization_90 (Batc (None, 10, 10, 512)       2048      \n",
      "_________________________________________________________________\n",
      "conv2d_89 (Conv2D)           (None, 8, 8, 512)         2359808   \n",
      "_________________________________________________________________\n",
      "batch_normalization_91 (Batc (None, 8, 8, 512)         2048      \n",
      "_________________________________________________________________\n",
      "conv2d_90 (Conv2D)           (None, 8, 8, 512)         262656    \n",
      "_________________________________________________________________\n",
      "batch_normalization_92 (Batc (None, 8, 8, 512)         2048      \n",
      "_________________________________________________________________\n",
      "max_pooling2d_33 (MaxPooling (None, 4, 4, 512)         0         \n",
      "_________________________________________________________________\n",
      "global_average_pooling2d_2 ( (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_24 (Dense)             (None, 4096)              2101248   \n",
      "_________________________________________________________________\n",
      "batch_normalization_93 (Batc (None, 4096)              16384     \n",
      "_________________________________________________________________\n",
      "dense_25 (Dense)             (None, 4096)              16781312  \n",
      "_________________________________________________________________\n",
      "batch_normalization_94 (Batc (None, 4096)              16384     \n",
      "_________________________________________________________________\n",
      "dense_26 (Dense)             (None, 1000)              4097000   \n",
      "_________________________________________________________________\n",
      "batch_normalization_95 (Batc (None, 1000)              4000      \n",
      "_________________________________________________________________\n",
      "dense_27 (Dense)             (None, 1)                 1001      \n",
      "=================================================================\n",
      "Total params: 33,030,321\n",
      "Trainable params: 33,003,489\n",
      "Non-trainable params: 26,832\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = model(imgs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 列表表达式\n",
    "# 使用模型进行预测\n",
    "np.array([p[0].numpy() for p in tf.cast(pred > 0.5,tf.int32)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 0, 1, 0, 0, 1, 0, 1])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 实际的label\n",
    "np.array([l[0] for l in labels])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = tf.keras.optimizers.Adam()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用metrics计算\n",
    "epoch_loss_avg = tf.keras.metrics.Mean('train_loss')\n",
    "train_accuracy = tf.keras.metrics.Accuracy()\n",
    "\n",
    "# 使用metrics计算\n",
    "epoch_loss_avg_test = tf.keras.metrics.Mean('test_loss')\n",
    "test_accuracy = tf.keras.metrics.Accuracy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_step(model,images,labels):\n",
    "    with tf.GradientTape() as t:\n",
    "        pred = model(images)\n",
    "        loss_step = tf.keras.losses.BinaryCrossentropy(from_logits = True)(labels,pred)\n",
    "    grads = t.gradient(loss_step,model.trainable_variables)\n",
    "    optimizer.apply_gradients(zip(grads,model.trainable_variables))\n",
    "    epoch_loss_avg(loss_step)\n",
    "    train_accuracy(labels,tf.cast(pred > 0,tf.int32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "def test_step(model,images,labels):\n",
    "    pred = model(images,training = False) # 使用非训练状态\n",
    "    loss_step = tf.keras.losses.BinaryCrossentropy(from_logits = True)(labels,pred)\n",
    "    epoch_loss_avg_test(loss_step)\n",
    "    test_accuracy(labels,tf.cast(pred > 0,tf.int32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义列表记录数据\n",
    "train_loss_result = []\n",
    "train_acc_result = []\n",
    "\n",
    "test_loss_result = []\n",
    "test_acc_result = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_epoch =30"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".........................."
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-75-66b6a3184b7c>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mepoch\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum_epoch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m     \u001b[1;32mfor\u001b[0m \u001b[0mimgs_\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabels_\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mtrain_image_ds\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m         \u001b[0mtrain_step\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mimgs_\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlabels_\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      4\u001b[0m         \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'.'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mend\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m''\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m     \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m<ipython-input-70-6286f8761a1b>\u001b[0m in \u001b[0;36mtrain_step\u001b[1;34m(model, images, labels)\u001b[0m\n\u001b[0;32m      3\u001b[0m         \u001b[0mpred\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimages\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m         \u001b[0mloss_step\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkeras\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlosses\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mBinaryCrossentropy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfrom_logits\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlabels\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m     \u001b[0mgrads\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgradient\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss_step\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrainable_variables\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      6\u001b[0m     \u001b[0moptimizer\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply_gradients\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgrads\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrainable_variables\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      7\u001b[0m     \u001b[0mepoch_loss_avg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mloss_step\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\backprop.py\u001b[0m in \u001b[0;36mgradient\u001b[1;34m(self, target, sources, output_gradients, unconnected_gradients)\u001b[0m\n\u001b[0;32m   1071\u001b[0m         \u001b[0moutput_gradients\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0moutput_gradients\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1072\u001b[0m         \u001b[0msources_raw\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mflat_sources_raw\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1073\u001b[1;33m         unconnected_gradients=unconnected_gradients)\n\u001b[0m\u001b[0;32m   1074\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1075\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_persistent\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\imperative_grad.py\u001b[0m in \u001b[0;36mimperative_grad\u001b[1;34m(tape, target, sources, output_gradients, sources_raw, unconnected_gradients)\u001b[0m\n\u001b[0;32m     75\u001b[0m       \u001b[0moutput_gradients\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     76\u001b[0m       \u001b[0msources_raw\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 77\u001b[1;33m       compat.as_str(unconnected_gradients.value))\n\u001b[0m",
      "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\eager\\backprop.py\u001b[0m in \u001b[0;36m_gradient_function\u001b[1;34m(op_name, attr_tuple, num_inputs, inputs, outputs, out_grads, skip_input_indices, forward_pass_name_scope)\u001b[0m\n\u001b[0;32m    160\u001b[0m       \u001b[0mgradient_name_scope\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mforward_pass_name_scope\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\"/\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    161\u001b[0m     \u001b[1;32mwith\u001b[0m \u001b[0mops\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mname_scope\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgradient_name_scope\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 162\u001b[1;33m       \u001b[1;32mreturn\u001b[0m \u001b[0mgrad_fn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmock_op\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0mout_grads\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    163\u001b[0m   \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    164\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mgrad_fn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmock_op\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0mout_grads\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\ops\\nn_grad.py\u001b[0m in \u001b[0;36m_Conv2DGrad\u001b[1;34m(op, grad)\u001b[0m\n\u001b[0;32m    604\u001b[0m           \u001b[0mexplicit_paddings\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mexplicit_paddings\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    605\u001b[0m           \u001b[0muse_cudnn_on_gpu\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0muse_cudnn_on_gpu\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 606\u001b[1;33m           data_format=data_format)\n\u001b[0m\u001b[0;32m    607\u001b[0m   ]\n\u001b[0;32m    608\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\tensorflow\\python\\ops\\gen_nn_ops.py\u001b[0m in \u001b[0;36mconv2d_backprop_filter\u001b[1;34m(input, filter_sizes, out_backprop, strides, padding, use_cudnn_on_gpu, explicit_paddings, data_format, dilations, name)\u001b[0m\n\u001b[0;32m   1089\u001b[0m         \u001b[0mstrides\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"use_cudnn_on_gpu\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0muse_cudnn_on_gpu\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"padding\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpadding\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1090\u001b[0m         \u001b[1;34m\"explicit_paddings\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mexplicit_paddings\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"data_format\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata_format\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1091\u001b[1;33m         \"dilations\", dilations)\n\u001b[0m\u001b[0;32m   1092\u001b[0m       \u001b[1;32mreturn\u001b[0m \u001b[0m_result\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1093\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[0m_core\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "for epoch in range(num_epoch):\n",
    "    for imgs_, labels_ in train_image_ds:\n",
    "        train_step(model, imgs_, labels_)\n",
    "        print('.', end='')\n",
    "    print()\n",
    "    \n",
    "    train_loss_result.append(epoch_loss_avg.result())\n",
    "    train_acc_result.append(train_accuracy.result())\n",
    "    \n",
    "    \n",
    "    for imgs_, labels_ in test_image_ds:\n",
    "        test_step(model, imgs_, labels_)\n",
    "        \n",
    "    test_loss_result.append(epoch_loss_avg_test.result())\n",
    "    test_acc_result.append(test_accuracy.result())\n",
    "    \n",
    "    print('Epoch:{}: loss: {:.3f}, accuracy: {:.3f}, test_loss: {:.3f}, test_accuracy: {:.3f}'.format(\n",
    "        epoch + 1,\n",
    "        epoch_loss_avg.result(),\n",
    "        train_accuracy.result(),\n",
    "        epoch_loss_avg_test.result(),\n",
    "        test_accuracy.result()\n",
    "    ))\n",
    "    \n",
    "    epoch_loss_avg.reset_states()\n",
    "    train_accuracy.reset_states()\n",
    "    \n",
    "    epoch_loss_avg_test.reset_states()\n",
    "    test_accuracy.reset_states()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
